#include <stdio.h>
#include <stdlib.h>
#include <time.h>


#define MAXSIZE 20

/**
 * 数组初始化（生成随机数）
 * @param A
 * @param length
 */
void ArrayInit(int A[], int length) {
    srand(time(NULL));  // 初始化随机种子
    for (int i = 0; i < length && i < MAXSIZE; ++i) {
        A[i] = rand() % 100;
    }
}

/**
 * 打印数组
 * @param A
 * @param length
 */
void ArrayPrint(int A[], int length) {
    for (int i = 0; i < length; ++i) {
        printf("%3d ", A[i]);
    }
    printf("\n");
}

/**
 * 元素交换
 * @param A
 * @param B
 */
void swap(int &A, int &B) {
    int tmp = A;
    A = B;
    B = tmp;
}

/**
 * 冒泡排序
 * @param A
 * @param length
 */
void BubbleSort(int A[], int n) {
    for (int i = 0; i < n; ++i) {
        bool swapFlag = false;              // 交换标记，未发生交换为false
        for (int j = n-1; j > i; --j) {
            if (A[j] < A[j-1]) {
                swap(A[j], A[j-1]);
                swapFlag = true;
            }
        }
        if (!swapFlag) {
            return;
        }
    }
}


int main() {
    printf("Hello, BubbleSort!\n");

    int A[MAXSIZE];         // 定义数组
    int length = 10;        // 设置使用的长度

    // 初始化数组生成随机数
    ArrayInit(A, length);
    ArrayPrint(A, length);

    // 冒泡排序
    BubbleSort(A, length);
    ArrayPrint(A, length);

}